<?php

Yii::import('crm.models._base.BaseGrupo');

class Grupo extends BaseGrupo {

    const ESTADO_ACTIVO = 'ACTIVO';
    const ESTADO_INACTIVO = 'INACTIVO';
    const ENTIDAD_TIPO_CONTACTO = 'CONTACTO';
    const ENTIDAD_TIPO_CUENTA = 'CUENTA';

    public $contadorGruposCuentas;

    /**
     * @return Grupo
     */
    public static function model($className = __CLASS__) {
        return parent::model($className);
    }

    public static function label($n = 1) {
        return Yii::t('app', 'Grupo|Grupos', $n);
    }

    public function attributeLabels() {
        return array_merge(parent::attributeLabels(), array(
            'contadorGruposCuentas' => Yii::t('app', 'Cuentas Registradas.'),
        ));
    }

    public function relations() {
        return array_merge(parent::relations(), array(
            'grupoCuenta' => array(self::MANY_MANY, 'Grupo', 'grupo_cuenta(cuenta_id, grupo_id)'),
        ));
    }

    public function rules() {
        return array(
            array('nombre, entidad_tipo', 'required'),
            array('peso', 'numerical', 'integerOnly' => true),
            array('nombre', 'length', 'max' => 64),
            array('estado', 'length', 'max' => 8),
            array('nombre', 'unique'),
            array('descripcion', 'safe'),
            array('estado', 'in', 'range' => array('ACTIVO', 'INACTIVO')), // enum,
            array('descripcion, estado', 'default', 'setOnEmpty' => true, 'value' => null),
            array('id, nombre, descripcion, estado, peso', 'safe', 'on' => 'search'),
        );
    }

    public function scopes() {
        return array(
            'activos' => array(
                'condition' => 'estado = :estado',
                'params' => array(
                    ':estado' => self::ESTADO_ACTIVO
                ),
            ),
            'entidad_tipo_contacto' => array(
                'condition' => 'entidad_tipo = :tipo',
                'params' => array(
                    ':tipo' => self::ENTIDAD_TIPO_CONTACTO
                ),
            ),
            'entidad_tipo_cuenta' => array(
                'condition' => 'entidad_tipo = :tipo',
                'params' => array(
                    ':tipo' => self::ENTIDAD_TIPO_CUENTA
                ),
            ),
        );
    }

    /**
     * Devuelve el maximo peso en la tabla
     * @author Alex Yepez
     */
    public function getNumMax() {
        $command = Yii::app()->db->createCommand()
                ->select("max(ope.peso) as 'NumMax'")
                ->from("grupo ope")
                ->where("ope.estado = :estado", array(':estado' => self::ESTADO_ACTIVO));
        return $command->queryAll();
    }

    public function getGrupos() {
        $command = Yii::app()->db->createCommand()
                ->select("ope.id,
                        ope.nombre,
                        ope.peso,
                        ope.estado")
                ->from("grupo ope")
                ->where("ope.estado = :estado", array(':estado' => self::ESTADO_ACTIVO))
                ->order("ope.peso ASC");

        return ($command->queryAll());
    }

    public function de_cuenta($cuenta_id) {
        $this->getDbCriteria()->mergeWith(
                array(
                    'condition' => 'cuenta_id = :cuenta_id',
                    'params' => array(
                        ':cuenta_id' => $cuenta_id
                    ),
                )
        );
        return $this;
    }

    /**
     * filtro de entidad tipo
     * @author Alex Yepez <ayepez@tradesystem.com.ec>
     * @param type $entidad_tipo
     * @return \Grupo
     */
    public function de_entidad_tipo($entidad_tipo) {
        $this->getDbCriteria()->mergeWith(
                array(
                    'condition' => 't.entidad_tipo = :entidad_tipo',
                    'params' => array(
                        ':entidad_tipo' => $entidad_tipo
                    )
        ));
        return $this;
    }

    public function GruposCuentasContar($idGrupo) {

        $contadorCuentas = 0;
        $gruposValidos = $this->GruposCuentas();

        foreach ($gruposValidos as $grupo) {
            if ($grupo->id == $idGrupo) {
                $cuentas = $grupo->cuentas;
                $contadorCuentas = count($cuentas);
            }
        }

        return $contadorCuentas;
    }

    public function getNumeroCuentas() {
        $numCuentas = 0;

        if ($this->id) {
            $numCuentas = $this->GruposCuentasContar($this->id);
        }
        return $numCuentas;
    }

    /**
     * @author Miguel Alba <malba@tradesystem.com.ec>
     * @return array devuelve un arreglo de todos los grupos que contienen cuentas asignadas
     */
    public function GruposCuentas() {
        $grupos = Grupo::model()->findAll();
        $gruposValidos = array();
        $gruposValidos2 = array();
        foreach ($grupos as $grupo) {
            if ($grupo->cuentas) {
                array_push($gruposValidos, $grupo);
            }
        }

        foreach ($gruposValidos as $grupo) {

            $cuentas = $grupo->cuentas;

            foreach ($cuentas as $cuenta) {
                if (!CampaniaClientesOwner::model()->findByPk($cuenta->id)) {
                    
                }
            }
        }

        return $gruposValidos;
    }

}
